﻿using System;
using System.Collections;
using KWatkins.FluentMoqBuilder.Argument;

namespace KWatkins.FluentMoqBuilder
{
	internal static partial class Validate
	{
		internal static IClass<T> Argument<T>(T argument, string parameterName)
			where T : class
		{
			return new ClassValidation<T>(argument, parameterName);
		}
		internal static IString Argument(string argument, string parameterName)
		{
			return new StringValidation(argument, parameterName);
		}
		internal static IGuid Argument(Guid argument, string parameterName)
		{
			return new GuidValidation(argument, parameterName);
		}
		internal static IDateTime Argument(DateTime argument, string parameterName)
		{
			return new DateTimeValidation(argument, parameterName);
		}
		internal static ICollection<T> CollectionArgument<T>(T argument, string parameterName)
			where T : ICollection
		{
			return new CollectionValidation<T>(argument, parameterName);
		}
		internal static IEnum<T> EnumArgument<T>(T argument, string parameterName)
			where T : struct
		{
			return new EnumValidation<T>(argument, parameterName);
		}
	}
}
